#include "key_widget.h"

#include <QKeyEvent>
#include <QLabel>
#include <QVBoxLayout>
#include <QDebug>

KeyWidget::KeyWidget(QWidget *parent): QWidget{parent}
{
    // 文本
    label = new QLabel(this);
    label->setText("可移动标签");
    label->setFrameShape(QFrame::Box);
    label->setFixedSize(100,100);
    label->setAlignment(Qt::AlignCenter);
    label->setStyleSheet("background-color: red; color: white; font-size: 16px;");

    // 初始位置设置为窗口得到中心
    label->move((width() - label->width()) / 2, (height() - label->height()) / 2);

    setFocusPolicy(Qt::StrongFocus);
}

// 键盘按下
void KeyWidget::keyPressEvent(QKeyEvent *event)
{
    // 获取标签的当前位置
    QPoint currentPos = label->pos();
    int step = 10; // 每次移动的步长(像素)

    // 边界检查，防止移除窗口
    int maxX = width() - label->width();
    int maxY = height() - label->height();

    // 1. 1个按键
    switch (event->key()) {
        case Qt::Key_Return:
            qDebug() << "Enter";
            break;
        case Qt::Key_Control:
            qDebug() << "Control";
            break;
        case Qt::Key_Shift:
            qDebug() << "Shift";
            break;
        case Qt::Key_Escape:
            qDebug() << "Escape";
            break;
        case Qt::Key_Up:
            qDebug() << "Up";
            // 让标签向上移动
            label->move(label->x(), qMax(0, currentPos.y() - step));
            break;
        case Qt::Key_Down:
            qDebug() << "Down";
            // 让标签向下移动
            label->move(label->x(), qMin(maxY, currentPos.y() + step));
            break;
        case Qt::Key_Left:
            qDebug() << "Left";
            // 让标签向左移动
            label->move(qMax(0, currentPos.x() - step), label->y());
            break;
        case Qt::Key_Right:
            qDebug() << "Right";
            // 让标签向右移动
            label->move(qMin(maxX, currentPos.x() + step), label->y());
            break;
        default:
            break;
    }

    // 2. 2个按键
    if(event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_A) {
        qDebug() << "Ctrl + A";
    }
    if(event->modifiers() == Qt::ShiftModifier && event->key() == Qt::Key_B) {
        qDebug() << "Shift + B";
    }

    // 3. 3个按键
    if((event->modifiers() & Qt::ControlModifier) && (event->modifiers() & Qt::ShiftModifier) && (event->key() == Qt::Key_A)) {
        qDebug() << "Ctrl + Shift + A";
    }
}

// 键盘释放
void KeyWidget::keyReleaseEvent(QKeyEvent *event)
{
    switch (event->key()) {
        case Qt::Key_Return:
            qDebug() << "keyReleaseEvent：Enter";
            break;
        case Qt::Key_Control:
            qDebug() << "keyReleaseEvent：Control";
            break;
        case Qt::Key_Shift:
            qDebug() << "keyReleaseEvent：Shift";
            break;
        case Qt::Key_Escape:
            qDebug() << "keyReleaseEvent：Escape";
            break;
        case Qt::Key_Up:
            qDebug() << "keyReleaseEvent：Up";
            break;
        case Qt::Key_Down:
            qDebug() << "keyReleaseEvent：Down";
            break;
        case Qt::Key_Left:
            qDebug() << "keyReleaseEvent：Left";
            break;
        case Qt::Key_Right:
            qDebug() << "keyReleaseEvent：Right";
            break;
        default:
            break;
    }
}
